Material design Animations
[TOC]
定制窗口转换动画
首先,在定义您从材料主题继承的风格时,使用 android:windowContentTransitions 属性启用窗口内容转换。您也可在您的风格定义中指定进入、退出以及共享元素转换,可以在 application theme 中或 activity theme 中设置,如:
|
|
如果要尽快开始进入转换,请针对被调用的操作行为使用 Window.setAllowEnterTransitionOverlap() 方法。这可以让您实现更生动的进入转换。
具体的窗口转场动画可以在 代码中定义也可以在 XML 中定义。
过渡(Transition)动画类型
进入退出动画效果
默认提供了三种过渡动画类型:
- Slide—–滑 动:从场景边缘移入或移出视图
- Fade—–淡入淡出:通过调整透明度在场景中增添或移除视图
- Explode—–分 解:从场景中心移入或移出视图
共享元素
- changeBounds - 为目标视图的布局边界的变化添加动画。
- changeClipBounds - 为目标视图的裁剪边界的变化添加动画。
- changeTransform - 为目标视图的缩放与旋转变化添加动画。
- changeImageTransform - 为目标图像的大小与缩放变化添加动画。
Circlr Reveal
由代码指定转场动画
|
|
Fade、Explode 动画设置方式与上面类似。当我们设置了转场动画后,Activity的启动方式需要使用
|
|
这个方法,第二个参数 options(一些额外的选项关于怎样启动新 Activity) 我们需要传入一个 ActivityOptionsCompat 对象然后用 toBundle() 转换成 Bundle 对象。ActivityOptionsCompat 对象可以通过下面的方法创建:
|
|
可以新建一个辅助类提供一下方法来创建 pairs:
|
|
由 XML 指定转场动画
代码中加载动画:
|
|
XML文件:
|
|
默认退出动画
如果我们没有设置 setReturnTransition ,finishAfterTransition(),这个方法会在 Activity 退出时反转入场动画 EnterTransition,并在动画结束后 finish() 这个Activity。如果设置了 setReturnTransition ,finishAfterTransition() 的退出动画就会反转 ReturnTransition。 没有设置入场动画的画,会直接调用 finish()。
共享元素动画
ChangeBounds -捕获共享元素的layout bound,然后播放layout bound变化动画。ChangeBounds 是共享元素变换中用的最多的,因为前后两个activity中共享元素的大小和位置一般都是不同的。
ChangeTransform - 捕获共享元素的缩放(scale)与旋转(rotation)属性 ,然后播放缩放(scale)与旋转(rotation)属性变化动画。
ChangeClipBounds - 捕获共享元素clip bounds,然后播放clip bounds变化动画。
ChangeImageTransform - 捕获共享元素(ImageView)的transform matrices 属性,然后播放ImageViewtransform matrices 属性变化动画。与ChangeBounds相结合,这个变换可以让ImageView在动画中高效实现大小,形状或者ImageView.ScaleType 属性平滑过度。
@android:transition/move - 将上述所有变换同时进行的一个TransitionSet 。就如在第一章中所讲的一样,如果共享元素的进入和返回变换没有特别声明,框架将使用它作为默认的变换。
共享的元素需要在 XML 里面制定 android:transitionName 值一样,Fragment 和 Activity 中的调用方法也不一样。Activity 里面可以将共享元素添加到 pair 键值对中,来启动。而 Fragment 则利用类似的方法:
|
|
- 参考泡网系列文章:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0201/2394.html
- 内部实现http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0116/2320.html